// 页面路径：store/index.js 
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex); //vue的插件机制

//Vuex.Store 构造器选项
const store = new Vuex.Store({
	state: { //存放状态
		userInfo:uni.getStorageSync('userInfo'),
		token:uni.getStorageSync('token')
	},
	getters: {
		doneTodos: state => {
			return state.todos.filter(todo => todo.done)
		},
		doneTodosCount: (state, getters) => {
			//state ：可以访问数据
			//getters：访问其他函数，等同于 store.getters
			return getters.doneTodos.length
		},
		getTodoById: (state) => (id) => {
			return state.todos.find(todo => todo.id === id)
		}
	},
	// Vuex中store数据改变的唯一方法就是mutation  mutations 里面装着改变数据的方法集合，处理数据逻辑的方法全部放在 mutations 里，使数据和视图分离。
	// 它必须是同步函数
	mutations: {
		changeToken(state,token) {
			// 变更状态
			state.token = token
		},
		changeUserInfo(state,userInfo) {
			state.userInfo = userInfo
		}
	},
	// action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
	// action 类似于 mutation ，不同在于：
	
	// action 提交的是 mutation，通过 mutation 来改变 state ，而不是直接变更状态。
	// action 可以包含任意异步操作。
	actions:{
			addCountAction (context,num) {
			    context.commit('add',num)
			}
		}
})
export default store